--- title: "01-http协议-websocket协议" created: 2025-12-02 tags: - 项目 aliases: - http协议-websocket协议 - http协议/websocket协议 --- # http协议/websocket协议 ### HTTP协议 HTTP(超文本传输协议,HyperText Transfer Protocol)是一种请求-响应(request-response)协议,通常用于客户端和服务器之间的通信。它在万维网和大多数网络应用中广泛使用。HTTP请求的主要特点如下: - **单向通信**:HTTP协议遵循请求-响应模式,也就是说,客户端向服务器发送请求后,服务器接收请求并返回一个响应。通信是单向的,只有当客户端发起请求时,服务器才会响应。 - **短连接**:HTTP 1.0 默认是短连接(short-lived connection),每次请求-响应完成后就关闭连接。HTTP 1.1中引入了持久连接(keep-alive),允许在单一连接上连续发送多个请求。 - **无状态**:HTTP是无状态协议(stateless protocol),每个请求都是独立的,不会保留上一次请求的信息。服务器无法主动向客户端推送信息。 - **通信延迟**:对于每次新请求,客户端和服务器之间必须重新建立TCP连接,这会增加一定的延迟,特别是在频繁通信时。 #### 使用场景: HTTP非常适合不需要实时数据更新的应用,如网页加载、API调用等。适合短时间内传输一次数据的场景,例如获取页面内容、提交表单等。 ### 2. WebSocket请求 WebSocket是一种基于TCP的全双工(full-duplex)通信协议,允许客户端和服务器之间建立长时间的、实时的双向连接。WebSocket协议在HTTP之上创建,但连接建立后不再使用HTTP请求方式,而是保持开放连接的状态。 - **双向通信**:WebSocket是全双工通信协议(full-duplex protocol),允许客户端和服务器同时发送和接收数据。服务器可以随时推送数据到客户端,反之亦然,这对于实时应用非常有用。 - **持久连接**:WebSocket在建立连接后保持该连接,而不是像HTTP那样频繁地建立和关闭连接。连接持续打开直到客户端或服务器显式地关闭。 - **低延迟**:由于不需要频繁建立连接,WebSocket在数据频繁传输的场景下有较低的通信延迟,非常适合实时应用。 - **数据传输效率高**:WebSocket仅在握手阶段使用HTTP,握手完成后改用WebSocket协议传输数据,这样可以减少协议头的大小,降低带宽消耗。 #### 使用场景: WebSocket通常用于需要实时数据更新的应用,如在线游戏、聊天系统、股票行情推送、实时通知等。特别适用于对延迟敏感且需要服务器主动推送信息的场景。 ### 3. 对比 HTTP与WebSocket | 特性 | HTTP请求 | WebSocket请求 | | --- | --- | --- | | 通信模式 | 单向通信,只能请求-响应 | 双向通信,支持实时推送 | | 连接类型 | 短连接(可通过keep-alive保持连接) | 持久连接 | | 状态 | 无状态 | 有状态,连接保持开放直到关闭 | | 延迟 | 相对较高(每次请求-响应都建立新连接) | 较低(保持连接,不必重复建立) | | 数据传输效率 | 传输效率较低(每次请求都包含完整头信息) | 高效,减少了头信息传输 | | 应用场景 | 网页加载、REST API、非实时数据请求 | 在线游戏、聊天、实时数据推送 | ### 4. 在对战游戏中的应用 在对战游戏中,由于实时性和低延迟的需求,WebSocket更具优势: - **匹配系统**:HTTP协议难以支持异步匹配,因为它只能请求-响应,无法实时监控匹配状态;WebSocket则可以实时反馈匹配池的状态,匹配成功后直接通知客户端。 - **游戏数据同步**:游戏的状态(如位置、得分等)需在客户端和服务器之间频繁同步。WebSocket可以在极低延迟下同步这些数据,而HTTP会产生较高延迟。 - **实时通信**:在游戏中的聊天系统、实时通知等也可以通过WebSocket实现,无需频繁轮询。 总结来说,HTTP适合简单、短时间的请求;WebSocket适合需要实时、持续、低延迟的通信。在你的游戏中,WebSocket能满足对战匹配系统的实时通信需求,是更理想的选择。 --- **项目分区导航**: [[00-游戏逻辑 前后交互|游戏逻辑 前后交互]] ⬅️ | 01-http协议-websocket协议 | ➡️ [[02-JSON|JSON]]